/*Copyright (C) 2009 - 2011 MASSART GAUTHIER and Careil Baptiste

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

#ifdef WIN32
# include <process.h>
# undef execv
# define __execv execv
#else
# include <unistd.h>
#endif

#include "../headers.h"

void editer_liste_nouveautes_version(char liste_nouveautes_version[5][35]) {
	bool premier_tour = true;
	short quitter = 0, choix = 1, nombre_choix = 6, x = 10, y = 10, k = 0;

	clear();
	afficher_titre("CREATION VERSION.TXT");
	afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 7, 39, 1);

	while(quitter == 0) {

		if(!premier_tour)
			k = getch();
		else
			premier_tour = false;

		if(k == touche_haut && choix > 1) {
			choix--;
		}
		else if(k == touche_bas && choix < nombre_choix) {
			choix++;
		}

		afficher_fleches_options(y, choix);

		editer_chaine(x, y, 0, "Nouveauté 1 :                      ", liste_nouveautes_version[0]);
		editer_chaine(x, y + 2, 0, "Nouveauté 2 :                      ", liste_nouveautes_version[1]);
		editer_chaine(x, y + 4, 0, "Nouveauté 3 :                      ", liste_nouveautes_version[2]);
		editer_chaine(x, y + 6, 0, "Nouveauté 4 :                      ", liste_nouveautes_version[3]);
		editer_chaine(x, y + 8, 0, "Nouveauté 5 :                      ", liste_nouveautes_version[4]);
		mvaddstr(y + 10, x, "Retour");

		if(choix == 1) {
			editer_chaine(x, y, k, "Nouveauté 1 :                      ", liste_nouveautes_version[0]);
		}
		else if(choix == 2) {
			editer_chaine(x, y + 2, k, "Nouveauté 2 :                      ", liste_nouveautes_version[1]);
		}
		else if(choix == 3) {
			editer_chaine(x, y + 4, k, "Nouveauté 3 :                      ", liste_nouveautes_version[2]);
		}
		else if(choix == 4) {
			editer_chaine(x, y + 6, k, "Nouveauté 4 :                      ", liste_nouveautes_version[3]);
		}
		else if(choix == 5) {
			editer_chaine(x, y + 8, k, "Nouveauté 5 :                      ", liste_nouveautes_version[4]);
		}
		else if(choix == 6) {
			CSLP_Color(CTS, CBS);
			mvaddstr(y + 10, x, "Retour");
			CSLP_Color(COLOR_WHITE, COLOR_BLACK);
			if(k == KEY_RETURN) {
				quitter = 1;
				afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 7, 39, 1);
			}
		}
	}
}

void changer_type_source(short x, short y, short k, char chemin_fichier[20]) {
	int type_source = 1;
	move(y, x);

	if(!strcmp(src_global, chemin_fichier)) {
		type_source = 1;
	}
	else if(!strcmp(exec_linux, chemin_fichier)) {
		type_source = 2;
	}
	else if(!strcmp(exec_win, chemin_fichier)) {
		type_source = 3;
	}
	else if(!strcmp(fichier_a_suppr, chemin_fichier)) {
		type_source = 4;
	}


	if(k == touche_droite && type_source < 4) {
		type_source++;
	}
	if(k == touche_gauche && type_source > 1) {
		type_source--;
	}

	if(k != -1)
		CSLP_ColorBG(CBS);

	if(type_source == 1) {
		CSLP_ColorText(COLOR_BLACK);
		addstr("←");
		CSLP_ColorText(CT);
		addstr("Globale");
		CSLP_ColorText(COLOR_WHITE);
		addstr("→");
	}
	else if(type_source == 2) {
		CSLP_ColorText(COLOR_WHITE);
		addstr("←");
		CSLP_ColorText(CT);
		addstr(" Linux ");
		CSLP_ColorText(COLOR_WHITE);
		addstr("→");
	}
	else if(type_source == 3) {
		CSLP_ColorText(COLOR_WHITE);
		addstr("←");
		CSLP_ColorText(CT);
		addstr("Windows");
		CSLP_ColorText(COLOR_WHITE);
		addstr("→");
	}
	else if(type_source == 4) {
		CSLP_ColorText(COLOR_WHITE);
		addstr("←");
		CSLP_ColorText(CT);
		addstr("A suppr");
		CSLP_ColorText(COLOR_BLACK);
		addstr("→");
	}
	else {
		CSLP_ColorText(COLOR_RED);
		addstr("Inconnu");
	}

	if(k != -1)
		CSLP_ColorBG(COLOR_BLACK);


	if(type_source == 1) {
		strcpy(chemin_fichier, src_global);
	}
	else if(type_source == 2) {
		strcpy(chemin_fichier, exec_linux);
	}
	else if(type_source == 3) {
		strcpy(chemin_fichier, exec_win);
	}
	else if(type_source == 4) {
		strcpy(chemin_fichier, fichier_a_suppr);
	}

	CSLP_ColorText(COLOR_WHITE);
}

void editer_liste_fichiers_version(char liste_chemins_fichiers[90][20], char liste_fichiers[90][100], char liste_md5_ascii[90][33]) {
	bool premier_tour = true;
	short quitter = 0, choix[2] = {1, 0}, nombre_choix = 0, x = 10, y = 10, i = 0, i_max = 0, k = 0;

	for(i = 0; liste_chemins_fichiers[i][0] != '\0'; i++) {
		nombre_choix++;
	}

	clear();
	afficher_titre("CREATION VERSION.TXT");
	afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 7, 39, 1);

	while(quitter == 0) {

		if(!premier_tour)
			k = getch();
		else
			premier_tour = false;

		if(k == touche_haut && choix[0] > 1) {
			choix[0]--;
		}
		else if(k == touche_bas && choix[0] < nombre_choix + 2) {
			choix[0]++;
		}
		else if(k == 9 && choix[1] == 0) {
			choix[1]++;
		}
		else if(k == M_KEY_BACKTAB && choix[1] == 1) {
			choix[1]--;
		}

		if(choix[0] < 10) {
			i = 0;
			i_max = 10;
			afficher_fleches_options(y, choix[0]);
		}
		else {
			i = choix[0] - 10;
			i_max = choix[0];
			afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 7, 39, 1);
			afficher_fleches_options(y, 10);
		}

		while(i != nombre_choix && i != i_max) {
			changer_type_source(x, y, -1, liste_chemins_fichiers[i]);
			editer_chaine(x + 15, y, 0, "", liste_fichiers[i]);
			if(liste_md5_ascii[i][0] != '\0') {
				mvaddstr(y, x + 80, liste_md5_ascii[i]);
			}
			else {
				if(strcmp(liste_chemins_fichiers[i], fichier_a_suppr)) {
					mvaddstr(y, x + 80, "Vous de générer les MD5 !");
				}
				else {
					mvaddstr(y, x + 80, "--------------------------------");
				}
			}
			y += 2;
			i++;
		}
		x = 10, y = 10;

		if(choix[0] <= nombre_choix) {
			if(choix[1] == 0) {
				if(choix[0] < 10)
					changer_type_source(x, y + 2 * (choix[0]) - 2, k, liste_chemins_fichiers[choix[0] - 1]);
				else
					changer_type_source(x, y + 18, k, liste_chemins_fichiers[choix[0] - 1]);
			}
			else {
				if(choix[0] < 10)
					editer_chaine(x + 15, y + 2 * (choix[0]) - 2, k, "", liste_fichiers[choix[0] - 1]);
				else
					editer_chaine(x + 15, y + 18, k, "", liste_fichiers[choix[0] - 1]);
			}
		}

		if(choix[0] == nombre_choix + 1) {
			CSLP_Color(CTS, CBS);
			mvaddstr(y + 18, x, "Ajouter un fichier");
			CSLP_Color(COLOR_WHITE, COLOR_BLACK);
			if(k == KEY_RETURN) {
				nombre_choix++;
				choix[0] = nombre_choix;
				choix[1] = 1;
				k = KEY_RETURN;
				premier_tour = true;
			}
		}
		if(choix[0] == nombre_choix + 2) {
			mvaddstr(y + 16, x, "Ajouter un fichier");
			CSLP_Color(CTS, CBS);
			mvaddstr(y + 18, x, "Retour");
			CSLP_Color(COLOR_WHITE, COLOR_BLACK);
			if(k == KEY_RETURN) {
				quitter = 1;
				afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 7, 39, 1);
			}
		}

	}
}

void generer_md5_version_txt(char liste_chemins_fichiers[90][20], char liste_fichiers[90][100], char liste_md5_ascii[90][33]) {
	short i;
	char fichier_a_ouvrir[100], md5_ascii[33];

	for(i = 0; liste_fichiers[i][0] != '\0'; i++) {
		if(!strcmp(liste_chemins_fichiers[i], fichier_a_suppr)) {
		}
		else if(!strcmp(liste_chemins_fichiers[i], exec_win)) {
#ifdef WIN32
			strcpy(fichier_a_ouvrir, "bin/release/");
			strcat(fichier_a_ouvrir, liste_fichiers[i]);
			get_md5_file(fichier_a_ouvrir, md5_ascii);
			strcpy(liste_md5_ascii[i], md5_ascii);
			if(fichier_existe(fichier_a_ouvrir)) {
				get_md5_file(fichier_a_ouvrir, md5_ascii);
			}
			else {
				get_md5_file(liste_fichiers[i], md5_ascii);
			}
			strcpy(liste_md5_ascii[i], md5_ascii);
#else
#endif
		}
		else if(!strcmp(liste_chemins_fichiers[i], exec_linux)) {
#ifdef WIN32
#else
			strcpy(fichier_a_ouvrir, "bin/release/");
			strcat(fichier_a_ouvrir, liste_fichiers[i]);
			if(fichier_existe(fichier_a_ouvrir)) {
				get_md5_file(fichier_a_ouvrir, md5_ascii);
			}
			else {
				get_md5_file(liste_fichiers[i], md5_ascii);
			}
			strcpy(liste_md5_ascii[i], md5_ascii);
#endif
		}
		else {
			get_md5_file(liste_fichiers[i], md5_ascii);
			strcpy(liste_md5_ascii[i], md5_ascii);
		}

	}
}

void creer_version_txt() {
	bool maj_serveur = false, boucle_ok = false;
	short quitter = 0, choix = 1, i, j = 0, k = 0, l = 0;
	char ligne_version[250], liste_nouveautes_version[5][35], liste_chemins_fichiers[90][20], liste_fichiers[90][100], liste_md5_ascii[90][33];
	FILE *version = NULL;
	memset(liste_nouveautes_version, 0, sizeof(liste_nouveautes_version));
	memset(liste_fichiers, 0, sizeof(liste_fichiers));
	memset(liste_md5_ascii, 0, sizeof(liste_md5_ascii));
	memset(liste_chemins_fichiers, 0, sizeof(liste_chemins_fichiers));

	clear();
	afficher_titre("CREATION VERSION.TXT");
	afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 7, 39, 1);

	switch_choix(7, 20, 0, "Récupérer la version du serveur ?\t\t", &maj_serveur);
	while(k != KEY_RETURN) {
		switch_choix(7, 20, k, "Récupérer la version du serveur ?\t\t", &maj_serveur);
		k = getch();
	}

	if(maj_serveur) {
		move(10, 0);
		if(!http_get_file("les-indemodables.googlecode.com", "/hg/src/version.txt", "version.txt", 'm', 10)) {
			move(13, 0);
			CSLP_ColorText(COLOR_GREEN);
			afficher_centre("Version.txt récupérer avec succès.");
			getch();
		}
	}

	version = fopen("version.txt", "r+");

	fgets(ligne_version, 250, version);
	for(i = 0; ligne_version[i] != '\n'; i++) { // Met la liste des nouveautés dans le tableau liste_nouveautes_version
		if(ligne_version[i] == '$') {
			j++;
			liste_nouveautes_version[j][l] = '\0';
			l = 0;
		}
		else {
			liste_nouveautes_version[j][l] = ligne_version[i];
			l++;
		}
	}

	i = 0, j = 0, l = 0;
	while(fgets(ligne_version, 250, version) != NULL) {

		if(strstr(ligne_version, src_global) != NULL) {
			strcat(liste_chemins_fichiers[i], src_global);
		}
		else if(strstr(ligne_version, exec_linux) != NULL) {
			strcat(liste_chemins_fichiers[i], exec_linux);
		}
		else if(strstr(ligne_version, exec_win) != NULL) {
			strcat(liste_chemins_fichiers[i], exec_win);
		}
		else if(strstr(ligne_version, fichier_a_suppr) != NULL) {
			strcat(liste_chemins_fichiers[i], fichier_a_suppr);
		}
		for(j = 0; ligne_version[j] != '$'; j++);

		j++;
		l = 0;
		while(ligne_version[j] != '$') {
			liste_fichiers[i][l] = ligne_version[j];
			l++;
			j++;
		}

		j++;
		l = 0;
		while(ligne_version[j] != '$') {
			liste_md5_ascii[i][l] = ligne_version[j];
			l++;
			j++;
		}
		i++;
	}

	fclose(version);
	clear();

	while(quitter == 0) {
		choix = afficher_menu_jeu("Afficher la liste de nouveautés\nAfficher la liste des fichiers\nGénérer les MD5\nQuitter sans sauvegarder\nQuitter  et  sauvegarder\n",  "CREATION VERSION.TXT");

		if(choix == 1) {
			editer_liste_nouveautes_version(liste_nouveautes_version);
			clear();
		}
		else if(choix == 2) {
			editer_liste_fichiers_version(liste_chemins_fichiers, liste_fichiers, liste_md5_ascii);
			clear();
		}
		else if(choix == 3) {
			generer_md5_version_txt(liste_chemins_fichiers, liste_fichiers, liste_md5_ascii);
			clear();
		}
		else if(choix == 4) {
			quitter = 1;
		}
		else if(choix == 5) {
			quitter = 2;
		}
	}

	if(quitter == 2) {
		version = fopen("version.txt", "w+");
		for(i = 0; i != 5; i++) { //Sauvegarde de la liste de nouveautés
			fprintf(version, "%s$", liste_nouveautes_version[i]);
		}
		for(i = 0; liste_chemins_fichiers[i][0] != '\0'; i++) { //Sauvegarde de la liste de fichier
			if(liste_fichiers[i] != NULL) { // Ne sauvegarde pas une entrée vide
				boucle_ok = false;
				fprintf(version, "\n%s", liste_chemins_fichiers[i]); //Sauvegarde du chemin du fichier sur le serveur
				for(j = 0; liste_fichiers[i][j] != '\0' && !boucle_ok; j++) {
					if(!strcmp(liste_fichiers[i], "[MAJ]Les Jeux Indemodables.exe")) {
						fprintf(version, "Les%%20Jeux%%20Indemodables.exe");
						boucle_ok = true;
					}
					else if(!strcmp(liste_fichiers[i], "[MAJ]les-indemodables")) {
						fprintf(version, "les-indemodables");
						boucle_ok = true;
					}
					else {
						if(strcmp(liste_chemins_fichiers[i], fichier_a_suppr)) { // Ne rajoute pas le chemin du fichier à supprimer après le "suppr"
							fprintf(version, "%c", liste_fichiers[i][j]);
						}
					}
				}
				fprintf(version, "$%s$%s$", liste_fichiers[i], liste_md5_ascii[i]); // Sauvegarde du chemin de sauvegarde du fichier et du MD5 lui correspondant
			}
		}
		fclose(version);
	}

}

void mise_a_jour() {
	FILE *fichier_maj = NULL;
	char ligne_maj[250],  ascii[1][33], caractere_actuel = 0;
	bool erreur = false, jeu_a_jour = true, fichier_a_jour = true;
	short nombre_fichier = 0, i, progression = 0, *barre_chargement = NULL, x = 10, y = 10;
	const char *argv[] = {update, NULL};

	clear();
	afficher_titre("MISE A JOUR");
	afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 5, 39, 1);
	move(15, 10);
	refresh();

	if(!http_get_file("les-indemodables.googlecode.com", "/hg/src/version.txt", "version.txt", 'm', 11)) {
		getyx(stdscr, y, x);
		CSLP_ColorText(COLOR_GREEN);
		afficher_centre("Liste des mises à jour téléchargée avec succès.");
		CSLP_ColorText(CT);
		afficher_centre("Vérification des mises à jour disponibles :");
		y += 4;
		fichier_maj = fopen("version.txt", "r");

		while(caractere_actuel != EOF) { // Calcule du nombre de fichier
			caractere_actuel = fgetc(fichier_maj);
			if(caractere_actuel == '\n') {
				nombre_fichier++;
			}
		}

		nombre_fichier -= 2;

		fseek(fichier_maj, 0, SEEK_SET);
		while(fgetc(fichier_maj) != '\n');

		barre_chargement = malloc(sizeof(int) * nombre_fichier);
		if(barre_chargement != NULL) {

			for(i = 0; i != nombre_fichier; i++)
				barre_chargement[i] = COLOR_BLACK;
			afficher_barre_chargement('m', 7, "Progression générale de la mise à jour", NULL, nombre_fichier, barre_chargement);

			while(fgets(ligne_maj, 250, fichier_maj) != NULL) { // Boucle de vérification de chaque fichier
				char **emplacement = split("$", ligne_maj);

				CSLP_ColorText(COLOR_WHITE);

				if(!strcmp(emplacement[0], "suppr")) {
					if(fichier_existe(emplacement[1])) {
						mvprintw(y, 10, "Suppression du fichier %s :", emplacement[1]);
						CSLP_ColorText(COLOR_YELLOW);
						mvaddstr(y, 70, "--------------------");
						if(remove(emplacement[1])) {
							CSLP_ColorText(COLOR_RED);
							mvaddstr(y, 98, "Echec de suppression !");
							for(i = progression; i + 1 != progression && progression < nombre_fichier; progression++)
								barre_chargement[progression] = COLOR_RED;
						}
						else {
							CSLP_ColorText(COLOR_GREEN);
							mvaddstr(y, 98, "Suppression réussie  !");
							for(i = progression; i + 1 != progression && progression < nombre_fichier; progression++)
								barre_chargement[progression] = COLOR_GREEN;
						}
					}
				}
#ifdef WIN32
				else if((strstr(emplacement[0], "/hg/exe-linux")) == NULL)
#else
				else if((strstr(emplacement[0], "/hg/exe-win")) == NULL)
#endif
				{
					mvprintw(y, 10, "Vérification du fichier %s :", emplacement[1]);
					if(fichier_existe(emplacement[1])) {
						get_md5_file(emplacement[1], ascii[0]);
						//Log(LOG_DEFAULT, "Checking file md5sum:");
						//Log(LOG_DEFAULT, emplacement[1]);
						//Log(LOG_DEFAULT, ascii[0]);
						//Log(LOG_DEFAULT, emplacement[2]);
						if(strncmp(ascii[0], emplacement[2], 32)) {
							CSLP_ColorText(COLOR_RED);
							mvaddstr(y, 70, "Fichier non à jour !");
							jeu_a_jour = false, fichier_a_jour = false;
						}
						else {
							CSLP_ColorText(COLOR_GREEN);
							mvaddstr(y, 70, "Fichier à jour !");
							fichier_a_jour = true;
							for(i = progression; i + 1 != progression && progression < nombre_fichier; progression++)
								barre_chargement[progression] = COLOR_GREEN;
						}
					}
					else {
						CSLP_ColorText(COLOR_MAGENTA);
						mvaddstr(y, 70, "Fichier inexistant !");
						jeu_a_jour = false, fichier_a_jour = false;
					}
					refresh();
					if(!fichier_a_jour) {
						CSLP_ColorText(COLOR_WHITE);
						if(!http_get_file("les-indemodables.googlecode.com", emplacement[0], emplacement[1], 93, y - 1)) {
							CSLP_ColorText(COLOR_GREEN);
							mvaddstr(y, 98, "Mise à jour réussie  !");
							for(i = progression; i + 1 != progression && progression < nombre_fichier; progression++)
								barre_chargement[progression] = COLOR_GREEN;
						}
						else {
							CSLP_ColorText(COLOR_RED);
							mvaddstr(y, 98, "Echec de mise à jour !");
							if(fichier_existe(emplacement[1])) { // On supprime les fichiers mal téléchargé
								remove(emplacement[1]);
							}
							for(i = progression; i + 1 != progression && progression < nombre_fichier; progression++)
								barre_chargement[progression] = COLOR_RED;
							erreur = true;
						}
					}
				}

				y += 3;
				if(y >= 36) {
					y -= 3;
					for(i = 0; i != 3; i++) {
						move(17, 0);
						deleteln();
						move(36, 0);
						insertln();
						CSLP_Color(CTS, CBS);
						mvaddstr(36, 3, "│");
						mvaddstr(36, 127, "│");
						CSLP_Color(COLOR_WHITE, COLOR_BLACK);
					}
				}

				refresh();
				unsplit(emplacement);

				afficher_barre_chargement('m', 7, "Progression générale de la mise à jour", NULL, nombre_fichier, barre_chargement);
			}
			fclose(fichier_maj);

			move(y + 1, x);
			CSLP_ColorText(COLOR_WHITE);

			get_md5_file(nom_jeu, ascii[0]);
			get_md5_file(nom_jeu_maj, ascii[1]);
			if(fichier_existe(nom_jeu_maj) && strcmp(ascii[0], ascii[1])) {
				CSLP_ColorText(COLOR_RED);
				afficher_centre("Appuyez sur une touche pour finir la mise à jour.");
				free(barre_chargement);
				getch();
				clear();
				close_gest_sons();
				endwin();
				execv(argv[0], argv);
			}
			if(!jeu_a_jour && !erreur) {
				afficher_centre("Vous disposez désormais de la dernière version.");
			}
			else if(jeu_a_jour) {
				afficher_centre("Aucune mise à jour.");
			}
			else {
				afficher_centre("Des erreurs se sont produitent. La mise à jour doit être relancée.");
			}
			CSLP_ColorText(COLOR_RED);
			afficher_centre("Appuyer sur une touche pour continuer");
			getch();
		}
		free(barre_chargement);
	}
	else {
		move(y + 1, x);
		CSLP_ColorText(COLOR_WHITE);
		afficher_centre("Echec de récupération du fichier de mise à jour.");
		afficher_centre("Appuyer sur une touche pour continuer");
		getch();
	}
	clear();
}

void option_mise_a_jour(short x, short y, short k) {
	bool premier_tour = true;
	short quitter = 0, choix = 1, nombre_choix = 4, i = 0;

	CSLP_Color(CTS, CBS);
	mvaddstr(y, x, "Configurer les mises à jour");
	CSLP_Color(COLOR_WHITE, COLOR_BLACK);

	if(k == KEY_RETURN) {
		clear();
		afficher_titre("MISE A JOUR");
		afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 5, 39, 1);
		x = 10, y = 10, k = 0;

		while(quitter == 0) {
			if(!premier_tour) //Permet l'affichage des options
				k = getch();
			else
				premier_tour = false;

			if(k == touche_haut && choix > 1) {
				choix--;
			}
			else if(k == touche_bas && choix < nombre_choix) {
				choix++;
			}

			afficher_fleches_options(y, choix);

			mvaddstr(y, x, "Mise à jour");
			mvaddstr(y + 2, x, "Vérifier la disponibilité des mises à jour");
			switch_choix(x, y + 4, 0, "Vérifier les mises à jours au démarrage :     ", &verif_maj_start);
			mvaddstr(y + 6, x, "Retour");

			if(choix == 1) {
				CSLP_Color(CTS, CBS);
				mvaddstr(y, x, "Mise à jour");
				CSLP_Color(COLOR_WHITE, COLOR_BLACK);

				if(k == KEY_RETURN) {
					mise_a_jour();
					afficher_titre("MISE A JOUR");
					afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 5, 39, 1);
					premier_tour = true, k = 0;
				}
			}
			else if(choix == 2) {
				CSLP_Color(CTS, CBS);
				mvaddstr(y + 2, x, "Vérifier la disponibilité des mises à jour");
				CSLP_Color(COLOR_WHITE, COLOR_BLACK);

				if(k == KEY_RETURN) {
					char info_maj[250], fichier_non_a_jour[1000] = "";
					bool maj_jeu;

					clear();
					afficher_titre("MISE A JOUR");
					afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 5, 39, 1);
					move(20, 0);
					afficher_centre("Récupération de version.txt");
					refresh();

					if(!http_get_file("les-indemodables.googlecode.com", "/hg/src/version.txt", "version.txt", 'm', 10)) {

						clear();
						afficher_titre("MISE A JOUR");
						afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 5, 39, 1);

						if(info_verif_maj(info_maj, fichier_non_a_jour)) {
							move(20, 0);
							afficher_centre("Aucune mise à jour disponible");
							refresh();
							getch();
						}
						else {
							char **list_maj = split("$", info_maj), **liste_fichier_non_a_jour = split("$", fichier_non_a_jour);

							CSLP_ColorText(CT);
							mvaddstr(10, 10, "LISTE DES MISES À JOUR DISPONIBLE :");
							mvaddstr(10, 70, "¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯");
							for(i = 0; list_maj[i] != NULL; i++) {
								mvaddstr(12 + i, 10, list_maj[i]);
							}

							mvaddstr(10, 70, "LISTE DES FICHIERS À TÉLÉCHARGER :");
							mvaddstr(10, 70, "¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯");
							for(i = 0; liste_fichier_non_a_jour[i] != NULL; i++) {
								if(i < 23) {
									mvaddstr(12 + i, 70, liste_fichier_non_a_jour[i]);
								}
								else  {
									mvaddstr(35, 70, "-...");
								}
							}

							unsplit(list_maj);
							unsplit(liste_fichier_non_a_jour);
							refresh();
							getch();
							clear();
							afficher_titre("MISE A JOUR");
							afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 5, 39, 1);

							k = 0;
							switch_choix(7, 20, 0, "Voulez-vous mettre à jour le jeu ?\t\t", &maj_jeu);
							while(k != KEY_RETURN) {
								switch_choix(7, 20, k, "Voulez-vous mettre à jour le jeu ?\t\t", &maj_jeu);
								k = getch();
							}

							if(maj_jeu) {
								clear();
								mise_a_jour();
							}
						}
					}
					else {
						clear();
						afficher_titre("MISE A JOUR");
						afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 5, 39, 1);
						move(20, 0);
						afficher_centre("Impossible de récupérer Version.txt depuis le serveur.");
						refresh();
						getchar();
					}

					clear();
					afficher_titre("MISE A JOUR");
					afficher_cadre(3, DEFAULT_SCREEN_SIZE_X - 2, 5, 39, 1);
					premier_tour = true, k = 0;
				}
			}
			else if(choix == 3) {
				switch_choix(x, y + 4, k, "Vérifier les mises à jours au démarrage :     ", &verif_maj_start);
			}
			else if(choix == 4) {
				CSLP_Color(CTS, CBS);
				mvaddstr(y + 6, x, "Retour");
				CSLP_Color(COLOR_WHITE, COLOR_BLACK);
				if(k == KEY_RETURN)
					quitter = 1;
			}
		}
		clear();
		afficher_titre("OPTIONS");
	}
}

bool info_verif_maj(char *info_maj, char *fichiers_non_a_jour) {
	bool jeu_a_jour = true;
	char ligne_maj[250],  ascii[33];
	FILE *fichier_maj = NULL;

	fichier_maj = fopen("version.txt", "r");
	fgets(info_maj, 250, fichier_maj);
	while(fgets(ligne_maj, 250, fichier_maj) != NULL) {
		char **emplacement = split("$", ligne_maj);
#ifdef WIN32
		if((strstr(emplacement[0], "/hg/exe-linux")) == NULL)
#else
		if((strstr(emplacement[0], "/hg/exe-win")) == NULL)
#endif
		{
			if(fichier_existe(emplacement[1])) {
				get_md5_file(emplacement[1], ascii);

				if(strcmp(ascii, emplacement[2])) {
					jeu_a_jour = false;
					sprintf(fichiers_non_a_jour, "%s$-Fichier non a jour : %s", fichiers_non_a_jour, emplacement[1]);
				}
			}
			else {
				jeu_a_jour = false;
				sprintf(fichiers_non_a_jour, "%s$-Fichier inexistant : %s", fichiers_non_a_jour, emplacement[1]);
			}

			unsplit(emplacement);
		}
	}
	fclose(fichier_maj);

	return jeu_a_jour;
}
